﻿using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace YouDaoNotesCodes.RegEx
{
   public class RegEx
    {

        #region 正则使用
        public void RegexUse()
        {
            try
            {
                //1、【Regex静态方法】
                //Match和Matchs
                string s = "aaaa(bbb)aaaaaaaaa(bb)aaaaaa";
                string pattern = "\\(\\w+\\)";//括号内的字符可以是任何自核且匹配一次或者多次
                Match result = Regex.Match(s, pattern);
                MatchCollection results = Regex.Matches(s, pattern);

                Console.WriteLine(result.Value);//bbb
                Console.WriteLine(result.Groups[0].Value);//bbb
                Console.WriteLine(result.Groups[1].Value);//bbb
                Console.WriteLine(result.Groups[2].Value);//没有

                Console.WriteLine(results[0].Value);//bbb
                Console.WriteLine(results[1].Value);//bb

                //result.Value = {(bbb)};
                //results[0].Value = {(bbb)};
                //results[1].Value = {(bb)};
                //也就是match会捕获第一个匹配。而matches会捕获所有的匹配。
                //match类型就是一个单独的捕获，matchcollection就是一组捕获。

                //IsMatch
                string ditg = "12348596";
                string patternDitg = "^[0-9]*$";
                string isDitg = (Regex.IsMatch(ditg, patternDitg)) ? "有匹配数字" : "没有数字";
                Console.WriteLine(isDitg);

                //判断1：是否含有汉字
                if (Regex.IsMatch("abc->中文", @"[\u4e00-\u9fa5]+"))
                {
                    Console.WriteLine("字符串中有汉字");
                }
                else
                {
                    Console.WriteLine("字符串中无汉字");
                }

                //判断2：是否都为汉字
                if (Regex.IsMatch("我你a", @"^[\u4e00-\u9fa5]+$"))
                {
                    Console.WriteLine("全汉字");
                }
                else
                {
                    Console.WriteLine("不是全汉字");
                }

                //2、【Regex类的实例】

                //① 字符串替换 Replace  
                //例如我想把如下格式记录中的NAME值修改为WANG
                string line = "ADDR=1234;NAME=ZHANG;PHONE=6789";
                Regex reg = new Regex("NAME=(.+);");
                string modified = reg.Replace(line, "NAME=WANG;");
                //修改后的字符串为 ADDR=1234;NAME=WANG;PHONE=6789

                //② 字符串匹配 Match
                //例如我想把如下格式记录中的NAME值修改为WANG
                string line1 = "ADDR=1234;NAME=ZHANG;PHONE=6789";
                Regex reg1 = new Regex("NAME=(.+);");
                //例如我想提取记录中的NAME值
                Match match = reg1.Match(line1);
                string value = match.Groups[1].Value;
                Console.WriteLine("匹配到value的值为：{0}", value);

                //③ //就可以获得经度、纬度值，而以前需要几十行代码。
                Regex reg2 = new Regex(@"^\$GPRMC,[\d\.]*,[A|V],(-?[0-9]*\.?[0-9]+),([NS]*),(-?[0-9]*\.?[0-9]+),([EW]*),.*");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 正则判断
        public void SimpleJudge()
        {
            try
            {
  
            }
            catch (Exception ex)
            {
                
                throw ex;
            }
        }
        #endregion
    }
}
